package com.flyqiu.form.api.event;

import com.flyqiu.form.model.FlyQiuColumnInfo;
import com.flyqiu.form.model.SqlColumnModel;
import com.flyqiu.form.model.entity.FlyQiuTableConfig;

import java.util.List;

public interface FlyQiuTableEventManage {

    /**
     * 注册表单事件
     *
     * @param event 事件处理器
     */
    void register(FlyQiuTableEvent event);


    /**
     * 解除表单数据
     *
     * @param event 事件处理器
     */
    void unregister(FlyQiuTableEvent event);

    /**
     * 创建数据表前
     *
     * @param formConfig 表单配置
     */
    default void beforeCreateTable(FlyQiuTableConfig formConfig) {

    }

    /**
     * 创建表后
     *
     * @param formConfig 表单配置
     */
    default void afterCreateTable(FlyQiuTableConfig formConfig) {
    }

    /**
     * 更新数据表前
     *
     * @param formConfig 表新配置
     * @param oldColumn  表旧列
     */
    default void beforeUpdateTable(FlyQiuTableConfig formConfig, List<SqlColumnModel> oldColumn) {
    }

    /**
     * 更新数据表后
     */
    default void afterUpdateTable(FlyQiuTableConfig formConfig) {
    }

    /**
     * 同步数据表前
     *
     * @param formConfig 数据表配置
     */
    default void beforeSynchronizationTable(FlyQiuTableConfig formConfig) {
    }

    /**
     * 同步数据表后
     *
     * @param formConfig       数据表配置
     * @param newColumn        当前表的列信息（更新后的）
     * @param flyQiuColumnInfo 删除 修改，新增的列信息
     */
    default void afterSynchronizationTable(FlyQiuTableConfig formConfig, List<SqlColumnModel> newColumn, FlyQiuColumnInfo flyQiuColumnInfo) {
    }

    /**
     * 删除数据表之前
     *
     * @param formConfig 表单配置
     */
    default void beforeDeleteTable(FlyQiuTableConfig formConfig) {
    }

    /**
     * 删除数据表之后
     *
     * @param formConfig 表单配置
     */
    default void afterDeleteTable(FlyQiuTableConfig formConfig) {
    }

    /**
     * 清空数据表前
     *
     * @param formConfig 表单配置
     */
    default void beforeClearData(FlyQiuTableConfig formConfig) {
    }

    /**
     * 清口数据表后
     *
     * @param formConfig 表单配置
     */
    default void afterClearData(FlyQiuTableConfig formConfig) {
    }
}
